<?php
include_once "clases/negocio/clase.Grupo.php";

class GrupoDAO extends AbstractDAO
{
	function getEntity()
	{
		return new Grupo();
	}

	function findByUserId($id_usuario)
	{
		$sql = "SELECT g.id, g.nombre, g.descripcion, g.imagen, g.id_creador, ";
		$sql.= "(SELECT count(*) FROM miembro_grupo mg WHERE mg.id_grupo=g.id) as miembros, ";
		$sql.= "(SELECT usuario from usuario where id = g.id_creador) as usuario_creador ";
		$sql.= "FROM grupo g ";
		$sql.= "WHERE g.id in (SELECT id_grupo from miembro_grupo WHERE id_usuario=".$id_usuario.")";
		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function findByFilters($filters)
	{
		$sql = "SELECT g.id, g.nombre, g.descripcion, g.imagen, g.id_creador, ";
		$sql.= "(SELECT count(*) FROM miembro_grupo mg WHERE mg.id_grupo=g.id) as miembros, ";
		$sql.= "(SELECT usuario from usuario where id = g.id_creador) as usuario_creador, ";
		$sql.= "(SELECT count(*) from foro where id_grupo = g.id) as foros ";
		$sql.= "FROM grupo g ";
		$sql.= "WHERE 1=1 ";
		if (isset($filters["nombre"]))
			$sql.= "AND g.nombre LIKE '%". $filters["nombre"] . "%' ";
		if (isset($filters["descripcion"]))
			$sql.= "AND g.descripcion LIKE '%". $filters["descripcion"] . "%' ";

		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function isMiembroGrupo($id_usuario, $id_grupo){
		$sql = "SELECT * ";
		$sql.= "FROM miembro_grupo mg ";
		$sql.= "WHERE mg.id_usuario = $id_usuario ";
		$sql.= "AND mg.id_grupo = $id_grupo ";
		$rs = $this->getEntity()->_db->leer($sql);
		return ($this->getEntity()->_db->numero_filas($rs)> 0);
	}

	function getArchivosDespuesDe($timestamp) {
		$id_usuario=RegistryHelper::getIdUsuario();
		$sql.=" SELECT u.nombre as nombre_usuario, apellido, ag.fecha,
			g.nombre as nombre_grupo, ag.archivo, u.id as id_usuario, ag.id_grupo
			FROM usuario u INNER JOIN miembro_grupo mg ON mg.id_usuario = u.id
			INNER JOIN archivo_grupo ag ON ag.id_grupo=mg.id_grupo AND ag.id_usuario = u.id
			INNER JOIN grupo g ON g.id=mg.id_grupo
			WHERE g.id IN
			(SELECT id_grupo FROM miembro_grupo mg2 WHERE mg2.id_usuario=$id_usuario)
			AND ag.fecha>= '$timestamp'
			AND ag.id_usuario<>$id_usuario";
		return $rs = $this->getEntity()->_db->leer($sql);
	}

	function getMiembros($id_grupo){
		$sql = "SELECT u.* FROM usuario u, miembro_grupo mg ";
		$sql.= "WHERE u.id = mg.id_usuario ";
		$sql.= "AND mg.id_grupo = $id_grupo";

		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function getArchivos($id_grupo){
		$sql = "SELECT ag.*, u.usuario as nombre_usuario FROM archivo_grupo ag, usuario u ";
		$sql.= "WHERE ag.id_grupo = $id_grupo ";
		$sql.= "AND u.id = ag.id_usuario ";

		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function getForos($id_grupo){
		$sql = "SELECT f.*, u.usuario as nombre_usuario FROM foro f, usuario u ";
		$sql.= "WHERE id_grupo = $id_grupo ";
		$sql.= "AND u.id = f.id_creador ";

		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

	function getRanking($fecha_desde,$fecha_hasta) {
		$sql="SELECT g.nombre,count(distinct mg.id_usuario) as 'usuarios',date_format(g.fecha_creacion,'%Y-%m-%d') as fecha,count(distinct f.id) as cant_foros
			FROM miembro_grupo mg INNER JOIN grupo g on mg.id_grupo=g.id
			LEFT OUTER JOIN foro f ON f.id_grupo=g.id
			WHERE date_format(g.fecha_creacion,'%Y-%m-%d') >= '$fecha_desde' and date_format(g.fecha_creacion,'%Y-%m-%d')<='$fecha_hasta'
			GROUP BY mg.id_grupo ORDER BY usuarios desc";
		$rs = $this->getEntity()->_db->leer($sql);
		return $this->_rs2Collection($rs);
	}

}
?>